module associative_array();

// <data_type> array_name [index_type] // 声明关联数组
int assoc_arr[string]; // 关联数组，索引类型为 string, 值类型为 int

string i;

initial begin
    // 初始化关联数组
    assoc_arr["A"] = 1;
    assoc_arr["B"] = 2;
    assoc_arr["C"] = 3;

    $display("assoc_arr.num()=%0d", assoc_arr.num());

    // 打印关联数组的内容
    foreach (assoc_arr[i]) begin
        $display("assoc_arr[%0s]: %0d", i, assoc_arr[i]);
    end

    // 打印数组元素
    $display("Size of assoc_arr: %0d", assoc_arr.size());

    // 是否包含某个元素
    $display("assoc_arr['B'] %s", (assoc_arr.exists("B") ? "exists" : "does not exist"));
    $display("assoc_arr['D'] %s", (assoc_arr.exists("D") ? "exists" : "does not exist"));


    assoc_arr["D"] = 4; // 添加新元素
    // assoc_arr.first(i): 将关联数组中首位索引值赋值给变量 i
    assoc_arr.first(i); 
    $display("First index: %0s", i);
    // assoc_arr.last(i): 将关联数组中末尾索引值赋值给变量 i
    assoc_arr.last(i); 
    $display("Last index: %0s", i);

    i = "C"; // 设置 i 为 "C"
    // assoc_arr.prev(i): 将关联数组中索引为 i 的元素的前一个索引值赋值给变量 i
    assoc_arr.prev(i); 
    $display("Prev index: %0s", i);

    i = "C"; // 设置 i 为 "C"
    // assoc_arr.next(i): 将关联数组中索引为 i 的元素的下一个索引值赋值给变量 i
    assoc_arr.next(i);
    $display("Next index: %0s", i);


    // 删除关联数组的元素
    assoc_arr.delete("B");

    // 打印删除后的关联数组的内容
    foreach (assoc_arr[i]) begin
        $display("assoc_arr[%0s]: %0d", i, assoc_arr[i]);
    end

    // 删除所有元素
    assoc_arr.delete();
end

endmodule
